perm filename CARNES.FAI[AER,HPM]1 blob
sn#158971 filedate 1975-05-13 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00005 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00003 00002 TITLE CARNES
C00004 00003 AR2TAB: MOVEI T,44 TOTAL BITS/WORD
C00006 00004 X1←←A ↔ Y1←←B ↔ X2←←C ↔ Y2←←D
C00035 00005 END
C00036 ENDMK
C⊗;
TITLE CARNES
;FOR RECOGNIZING CARS
ENTRY CARNES
EXTERN CORGET,CORREL,SQRS
PCLN←←0
PCWD←←1
PCBY←←2
PCBYA←←3
LNWD←←4
LNBY←←5
LNBYA←←6
WDBY←←7
WDBI←←10
BYBI←←11
BPTAB←←12
LINTAB←←13
T←1 ↔ TT←2 ↔ TTT←3 ↔ ARRY1←4 ↔ ARRY2←5 ↔ P←17
A←6 ↔ B←7 ↔ C←10 ↔ D←11 ↔ E←13 ↔ F←14 ↔ G←15
RETAD: 0
TEMP: BLOCK 25 ;TEMPORARY STORAGE FOR STUFF
AR2TAB: MOVEI T,44 ;TOTAL BITS/WORD
IDIV T,BYBI(ARRY2) ;BYTE SIZE
MOVEM T,WDBY(ARRY2) ;BYTES PER WORD
SUBI TT,44 ;-NUMBER OF USED BITS/WORD
MOVNM TT,WDBI(ARRY2) ;SAVED
ADD T,LNBY(ARRY2)
SUBI T,1
IDIV T,WDBY(ARRY2) ;NUMBER OF WORDS/SCANLINE
MOVEM T,LNWD(ARRY2)
MOVE TT,T ;WORDS/LINE
IMUL TT,WDBY(ARRY2) ;BYTES/WORD
MOVEM TT,LNBYA(ARRY2) ;GIVES BYTES/LINE, INCLUDING NULLS
IMUL TT,PCLN(ARRY2)
MOVEM TT,PCBYA(ARRY2) ;TOTAL BYTES/PIC, INCL. NULLS
IMUL T,PCLN(ARRY2) ;LINES IN THE PICTURE
MOVEM T,PCWD(ARRY2) ;WORDS IN THE PICTURE
MOVE T,LNBY(ARRY2)
IMUL T,PCLN(ARRY2)
MOVEM T,PCBY(ARRY2) ;BYTES/PIC, NOT INCL. NULLS
MOVEI T,14(ARRY2)
ADD T,PCLN(ARRY2)
MOVEM T,BPTAB(ARRY2) ;ADDRESS OF BYTE POINTER TABLE
ADD T,LNBYA(ARRY2) ;ADDR OF FIRST WORD IN PICTURE
MOVN TT,PCLN(ARRY2) ;SET UP CNTR FOR LINE ADDRESSES
HRL TT,TT
HRRI TT,LINTAB(ARRY2)
LTLP: MOVEM T,(TT) ;MAKE LINE TABLE
ADD T,LNWD(ARRY2)
AOBJN TT,LTLP
MOVN TT,BPTAB(ARRY2)
HRL TT,LNBYA(ARRY2) ;SET UP CNTR FOR BYTE TABLE
AOBJN TT, ;DECR ADDRESS AND INCR COUNT BY 1
MOVN TT,TT
MOVEI T,4400
ADD T,BYBI(ARRY2)
LSH T,6
HRLZ T,T
BYLP: MOVEM T,(TT) ;MAKE BYTE POINTER TABLE
IBP T
AOBJN TT,BYLP
POPJ P,
X1←←A ↔ Y1←←B ↔ X2←←C ↔ Y2←←D
AX1←←TEMP ↔ AY1←←TEMP+1 ↔ AX2←←TEMP+2 ↔ AY2←←TEMP+3
BX1←←TEMP+4 ↔ BY1←←TEMP+5 ↔ BX2←←TEMP+6 ↔ BY2←←TEMP+7
SOUWIN←←TEMP+10 ↔ DESWIN←←TEMP+11 ↔ DEXSKP←←TEMP+12 ↔ DEYSKP←←TEMP+13
WSIZ1←←TEMP+14 ↔ DWSIZ←←TEMP+15 ↔ WSIZY1←←TEMP+16 ↔ VARIAN←←TEMP+17
SOUSIZ←←TEMP+20 ↔ WSIZ←←TEMP+21 ↔ DWSIZ←←TEMP+22 ↔ NEGXC←TEMP+23
MATCH: POP P,RETAD
POP P,BX2 ;A CARRELATOR. FINDS THE BEST MATCH
POP P,BY2 ;TO A CAR
POP P,BX1 ;IN ARRY2(BX1:BY1,BX2:BY2)
POP P,BY1
POP P,ARRY2
MOVE X1,BX1
MOVE X2,BX2 ; VCAR(PIC1,AX1,AY1,AX2,AY2,
MOVE Y1,BY1 ; PIC2,BX1,BY1,BX2,BY2);
MOVE Y2,BY2
FIXB: CAMLE X1,X2 ;FIRST FIX UP THE LIMITS SO
EXCH X1,X2 ;X1≤X2, X1≥0 X2<WIDTH ETC.
CAIGE X1,0
MOVEI X1,0
MOVE T,LNBY(ARRY2)
CAML X2,T
MOVEI X2,-1(T)
CAMLE Y1,Y2 ;SIMILAR FOR Y
EXCH Y1,Y2
CAIGE Y1,0
MOVEI Y1,0
MOVE T,PCLN(ARRY2)
CAML Y2,T
MOVEI Y2,-1(T)
CAMG X1,X2
CAMLE Y1,Y2
JRST FIXB
MOVEM X1,BX1
MOVEM X2,BX2
MOVEM Y1,BY1
MOVEM Y2,BY2
MOVE T,BX2 ;QUIT IF DESTINATION WINDOW IS TOO SMALL
SUB T,BX1
SUBI T,=11
JUMPGE T,QUITR
MOVE T,BY2
SUB T,BY1
SUBI T,=24
JUMPGE T,QUITR
THIS←←TT ↔ SIZ←←TTT
MOVEI X2,=11
MOVEI X1,=1
MOVEI Y2,=24
MOVEI Y1,=1
MOVEI SIZ,1(X2) ;CALCULATE SIZE OF BUFFER AREA
SUB SIZ,X1 ;FOR THE SOURCE WINDOW CODE
MOVEM SIZ,WSIZ1 ;WILL BE X WINDOWSIZE-1
MOVEM SIZ,WSIZ ;IS X WINDOWSIZ
MOVNM SIZ,DEXSKP ;WILL BE DELTA XB - DELTA XA
MOVEI T,1(Y2)
SUB T,Y1
MOVEM T,WSIZY1 ;WILL BE X WINDOWSIZE-1
MOVNM T,DEYSKP ;WIL BE DELTA YB - DELTA YA
IMUL SIZ,T
MOVEM SIZ,SOUSIZ ;SOURCE WINDOW SIZE (IN PIXELS)
ASH SIZ,1
ADDI SIZ,1
PUSHJ P,CORGET ;AND MAKE THAT BUFFER
HALT
MOVEM THIS,SOUWIN
SUBI THIS,1
MOVN T,T
HRLZ T,T
HRRI T,LINTAB(ARRY1) ;Y COUNTER
ADD T,Y1
MOVE 0,@BX2 ;FINISH UP MAKING DELTA XB -DELTA XA
SUB 0,@BX1
ADDI 0,1
MOVEM 0,DWSIZ
ADDM 0,DEXSKP
MOVE 0,@BY2 ;AND THE Y'S TOO
SUB 0,@BY1
ADDI 0,1
ADDM 0,DEYSKP
SOS WSIZ1 ;NOT TO MENTION X WINDOWSIZ-1
SOS WSIZY1 ;AND Y WINDOWSIZ-1
MOVE G,[MOVE TT,0(T)]
MOVE E,BPTAB(ARRY1) ;BP SKELETON
ADDI E,-1(X1)
MOVE E,(E)
SETZB B,A ;FOR SUM OF X AND X↑2, AS EXPLND BELOW
;DON'T FORGET! A,B,C,D ARE X1,X2,Y1,Y2 ALSO
ILYLP: MOVE F,E ;SETS UP IN LINE CODED
ADD F,(T) ;STUFF FOR THE INNER
MOVE TTT,WSIZ ;"LOOP" OF THE CORRELATION
ILXLP: PUSH THIS,G ;A SEQUENCE OF
ADDI G,1 ; MOVN TT,POSB(T)
ILDB C,F ; ADD A,SQRS+PIXEL(TT)
ADD B,C
ADD A,SQRS(C)
ADD C,[ADD A,SQRS(TT)]
PUSH THIS,C
SOJG TTT,ILXLP
ADD G,DEXSKP
AOBJN T,ILYLP
PUSH THIS,[JRST INRDON] ;AND THE FINAL INSTR.
;CALCULATE SUM[(X-XBAR)↑2] ALSO. THIS IS SAME AS SUM[X↑2-2 X XBAR+XBAR↑2],
;WHICH IS SUM[X↑2]-2 XBAR SUM[X]+XBAR↑2*N OR, SINCE XBAR=SUM[X]/N,
;SUM[X↑2]-2(SUM[X])↑2/N+(SUM[X])↑2/N WHICH IS SUM[X↑2]-(SUM[X])↑2/N
; THIS QUANTITY WILL BE CALLED VARIANCE
IMUL B,B
IDIV B,SOUSIZ
SUB A,B
MOVEM A,VARIAN
MOVE X1,BX1 ;MAKE THE DESTINATION
MOVE X2,BX2 ;WINDOW BUFFER
MOVE Y1,BY1
MOVE Y2,BY2
MOVEI SIZ,1(X2)
SUB SIZ,X1
MOVEM SIZ,DWSIZ
MOVEI T,1(Y2)
SUB T,Y1
IMUL SIZ,T
PUSHJ P,CORGET
HALT
MOVEM THIS,DESWIN
SUBI THIS,1
MOVN T,T ;Y COUNTER
HRLZ T,T
HRRI T,LINTAB(ARRY2)
ADD T,Y1
MOVE E,BPTAB(ARRY2) ;BYTE POINTER SKELETON
ADDI E,-1(X1) ;FOR DESTINATION
MOVE E,(E)
BUYLP: MOVE F,E ;UNPACKS THE DESTINATION
ADD F,(T) ;WINDOW, ONE WORD/SAMPLE
MOVE TTT,DWSIZ
BUXLP: ILDB 0,F
PUSH THIS,0
SOJG TTT,BUXLP
AOBJN T,BUYLP
MOVN B,DEXSKP ;NOW ACTUALLY CORRELATE
SUBI B,1
MOVEM B,NEGXC
HRLZI D,377777 ;VALUE OF BEST MATCH IN D
MOVE E,DESWIN ;LOCATION IN E
MOVE TTT,DEYSKP ;NUMBER OF ROWS
MOVE T,DESWIN ;WHERE TO START
CRYLP: HRL T,NEGXC ;INIT X CNTR, BUT KEEP OLD POSN
CRXLP: SETZB A,B ;ACCUMULATE CURRENT SUM IN A
STEZB C,D
JRST @SOUWIN ;JUMP TO PREVIOUSLY CREATED CODE
AOBJN T,CRXLP ;SHIFT IN X, AND TRY AGAIN
ADD T,WSIZ1 ;ADD WHATS NEEDED TO GET TO NEXT
SOJGE TTT,CRYLP ;SCANLINE, AND TRY AGAIN
SUB E,DESWIN ;DECOMPOSE SAVED BEST LOCATION
IDIV E,DWSIZ ;INTO X AND Y PARTS
ADDB E,@BY1 ;ACTUAL LOWER Y BOUND OF BEST MATCH
ADDB F,@BX1 ;ACTUAL LOWER X BOUND OF BEST MATCH
ADD F,WSIZ1 ;COMPUTE UPPER X BOUND
MOVEM F,@BX2 ;AND RETURN IT
ADD E,WSIZY1 ;UPPER Y BOUND
MOVEM E,@BY2 ;RETURNED
MOVE THIS,SOUWIN ;RETURN THE USED CORAGE
PUSHJ P,CORREL
MOVE THIS,DESWIN
PUSHJ P,CORREL
MOVE 1,D ;GET READY TO RETURN VALUE OF MATCH
ASH 1,4 ;SCALE IT UP BY 2↑4
IDIV 1,VARIAN ;NORMALIZE
JRST @RETAD ;AND RETURN
END